package Codigo;

import java.util.ArrayList;
import java.util.List;

public class TratarSenha {
	public List<String> letraPressionada = new ArrayList<String>();
    public String textoSenha;
	public String getTextoSenha() {
		return textoSenha;
	}

	public void setTextoSenha(String textoSenha) {
		this.textoSenha = textoSenha;
	}

	public List<String> verificaSenhaDigitada(){
		
		if (textoSenha.length()==8){
			return acharSenha8();
		}
		else{
			acharSenha10();
		}
		return null;
	}
	
	private List<String> acharSenha10() {
		List<String> lista = new ArrayList<String>();
		String pas = "";
		 // Posicao dentro do vetor dos elementos da lista
		int k;
		for (int i = 0; i < 10; i++) { //Posicao dentro da lista
			pas+=letraPressionada.get(i).charAt(i);
			for(k = 0 ; k < 6; k++){ 
				for(int j = 1; j < 10; j++){ 
					pas+=letraPressionada.get(j).charAt(k);
				}
			if (verSeqRepSenha(pas) == 1)
				lista.add(pas);
			else 
			{
				return null;
			}
			
			pas="";
			pas+=letraPressionada.get(i).charAt(i);
			}			
		}
		return lista;
	}


	private List<String> acharSenha8() {
		List<String> lista = new ArrayList<String>();
		String pas = "";
		 // Posicao dentro do vetor dos elementos da lista
		int k;
		for (int i = 0; i < 8; i++) { //Posicao dentro da lista
			pas+=letraPressionada.get(i).charAt(i);
			for(k = 0 ; k < 6; k++){ 
				for(int j = 1; j < 8; j++){ 
					pas+=letraPressionada.get(j).charAt(k);
				}
			if (verSeqRepSenha(pas) == 1)
				lista.add(pas);
			pas="";
			pas+=letraPressionada.get(i).charAt(i);
			}			
		}
		return lista;
	}

	private int verSeqRepSenha(String pas) {
		int aux, aux2, aux3;
	     
	    for (int i = 0; i < 8; i++) {
	    	aux=(int)pas.charAt(i);
			aux2=(int)pas.charAt(i+1);
			aux3=(int)pas.charAt(i+2);
			if((aux==aux2)||(aux==aux3)||(aux2==aux3)) //testo AAA
				return 0;
			if (((aux+1) == aux2)&&((aux2+1)==aux3)) // testo sequencia ABC
				return 0;
			if((aux==(aux2+1))&&(aux2==(aux3+1))) // testo CBA
				return 0;
			if (pas.indexOf(i) > 0) // caracteres repetidos
				return 0;				
		}
			
		return 1; //string sem sequencias
		
	}
	
	public int validasenha(String login, long id, String senha, ArrayList<String> senhas) {
		
		for (String senhaAlt : senhas) {
			String alt = fazSenha(login, senhaAlt, id);
			if (alt.equals(senha))
				return 1;
		}
		return 0;
		
	}
	
	public String fazSenha(String login, String senha, long UID) {
		String senhaCript;
		senhaCript = DigestCalculator.criptSHA1((senha+UID+login).toString());
		return senhaCript;
	}
	
	public List<String> getLetraPressionada() {
		return letraPressionada;
	}

	public void setLetraPressionada(String letraPressionada) {
		this.letraPressionada.add(letraPressionada);
	}


}
